# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/4 14:22 
@Author  : ZhangShenao 
@File    : zip_func.py 
@Desc    : 内置的zip()函数的使用
在Python中,zip()函数用于将两个或多个可迭代对象(如列表、元组、字典等)组合成一个元组列表,其中每个元组包含来自原始可迭代对象的一对或多个元素
简单来说,zip()函数可以合并多个序列,并返回一个迭代器,该迭代器生成由输入序列的当前元素组成的元组
zip()函数返回的是一个zip对象,它本质上是一个迭代器
当处理不等长的可迭代对象时,它会根据最短的长度来截断
"""


def use_zip():
    """使用内置的zip()函数,将多个iterable合并成一个tuple迭代器"""

    l1 = [1, 2, 3]
    l2 = [1.1, 2.2, 3.3]
    l3 = ['a', 'b', 'c']
    zipped = zip(l1, l2, l3)
    print(f'type of zipped is: {type(zipped)}, value is {list(zipped)}')


# 将属性attributes和值values组合成字典
attributes = ['name', 'dob', 'gender']
values = [['jason', '2000-01-01', 'male'],
          ['mike', '1999-01-01', 'male'],
          ['nancy', '2001-02-01', 'female']
          ]
print('组合方式1——自己实现:')
result1 = []
for value in values:
    item = {}
    for i, attr in enumerate(attributes):
        item[attr] = value[i]
    result1.append(item)
print(result1)

print('组合方式2——使用zip()函数实现:')
result2 = [dict(zip(attributes, v)) for v in values]
print(result2)
